package visitor;
import arbori.*;
import operatori.*;
import functii.*;

public class ToStringVisitor extends Visitor {
	private String s;
	
	public ToStringVisitor()//constructor implicit
	{
		this.s="";
	}
	public ToStringVisitor(String s)//constructor explicit
	{
		this.s=s;
	}
	
	public String getS()
	{
		return this.s;
	}
	public void setS(String s)
	{
		this.s=s;
	}
	public void visit(Plus p)
	{
	}
	public void visit(Minus m)
	{
	}
	public void visit(Cat c)
	{
	}
	public void visit(Produs p)
	{
	}
	public void visit(Necunoscuta n)
	{
		this.s="x";
	}
	public void visit(Constanta c)
	{
		this.s=Double.toString(c.getCt());
	}	
	public void visit(Operator p)
	{
		if((p.getFStang()!=null)&&(p.getFDrept()!=null))
		{
			visit(p.getFStang());
			String s1=this.s;
			visit(p.getFDrept());
			String s2=this.s;
			s=p.concatTermeni(s1,s2);
		}
	}
	public void visit(Functie f)
	{
		if(f.getFStang()!=null)
		{
			visit(f.getFStang());
			String s1=this.s;
			s=f.concatTermeni(s1);
			
		}
	}
	public void visit(Sin s)
	{}
	public void visit(Cos c)
	{}
	public void visit(Nod n)
	{
		if(n instanceof Operator)
		{
			visit((Operator)n);
		}
		else
		 {
		  if(n instanceof Necunoscuta)
			{
			  visit((Necunoscuta)n);
			 }
			else
				{
				 if(n instanceof Constanta)
				   {
					 visit((Constanta)n);
				    }
				 }
			}
	if(n instanceof Functie)
	{
		visit((Functie)n);
	}
	if(n instanceof Sin)
	{
		visit((Functie)n);
	}
	}
}

